home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / basic / purebasic_demo / purebasic / compilers / ppcmacros.pasm < prev    next >
Text File  |  2000-02-28  |  14KB  |  512 lines

  1.                 .ifndef    POWERPC_PPCMACROS_I
  2. .set     POWERPC_PPCMACROS_I,1
  3.  
  4. **
  5. **      0xVER: PPCmacros.i 8.0 (3.6.97)
  6. **
  7. **      standard macros and definitions for PowerPC
  8. **
  9.  
  10. .extern _PowerPCBase
  11.  
  12. .macro       BITDEFPPC
  13. \1P_\2    ,       \3
  14. \1B_\2    ,       31-(\3)
  15. \1F_\2    ,       1<<(31-(\3))
  16.                 .endm
  17.  
  18. .macro     ALLOCPPCMEM
  19.                 movem.l d1/a0/a1/a6,-(sp)
  20.                 move.l  _SysBase,a6
  21.                 add.l   #56,d0
  22.                 jsr     -684(a6)
  23.                 move.l  d0,d1
  24.                 beq     lb_1
  25.                 add.l   #39,d0
  26.                 and.l   #0xffffffe0,d0
  27.                 move.l  d0,a0
  28.                 move.l  d1,-4(a0)
  29. lb_1:
  30.                 movem.l (sp)+,d1/a0/a1/a6
  31.                 .endm
  32.  
  33. .macro      FREEPPCMEM
  34.                 movem.l d0/d1/a0/a1/a6,-(sp)
  35.                 move.l  a1,d0
  36.                 beq.b   lb_2
  37.                 move.l  -4(a1),a1
  38.                 move.l  _SysBase,a6
  39.                 jsr     -690(a6)
  40. lb_2:
  41.                 movem.l (sp)+,d0/d1/a0/a1/a6
  42.                 .endm
  43.  
  44.                 .set _POWERMODE,1
  45.                 .ifdef     _POWERMODE
  46.  
  47.                 .ifndef    __LOCALSIZE
  48. .set     __LOCALSIZE,1024
  49.                 .endif
  50.                 .ifndef    local
  51. .set     __LOCAL,r13
  52. .set       local,r13
  53.                 .endif
  54. .set        base,r2
  55. .set       stack,r1
  56. .set       trash,r0
  57.  
  58. **** these register symbols can be used when transferring parameters from
  59. **** 68K to PPC and vice versa
  60.  
  61. .set         _d0,r3
  62. .set         _d1,r4
  63. .set         _d2,r22
  64. .set         _d3,r23
  65. .set         _d4,r24
  66. .set         _d5,r25
  67. .set         _d6,r26
  68. .set         _d7,r27
  69. .set         _a0,r5
  70. .set         _a1,r6
  71. .set         _a2,r28
  72. .set         _a3,r29
  73. .set         _a4,base
  74. .set         _a5,r30
  75. .set         _a6,r31
  76.  
  77. .set        _fp0,f1
  78. .set        _fp1,f2
  79. .set        _fp2,f3
  80. .set        _fp3,f4
  81. .set        _fp4,f5
  82. .set        _fp5,f6
  83. .set        _fp6,f7
  84. .set        _fp7,f8
  85.  
  86. .macro        lw
  87.                         .ifdef    NEAR
  88.                                 lwz     \1,\2(base)
  89.                         .else
  90.                                 la      \1,\2
  91.                                 lwz     \1,0(\1)
  92.                         .endif
  93.                 .endm
  94.  
  95. .macro        lh
  96.                         .ifdef    NEAR
  97.                                 lhz     \1,\2(base)
  98.                         .else
  99.                                 la      \1,\2
  100.                                 lhz     \1,0(\1)
  101.                         .endif
  102.                 .endm
  103.  
  104. .macro       lhs
  105.                         .ifdef    NEAR
  106.                                 lha     \1,\2(base)
  107.                         .else
  108.                                 la      \1,\2
  109.                                 lha     \1,0(\1)
  110.                         .endif
  111.                 .endm
  112.  
  113. .macro        lb
  114.                         .ifdef    NEAR
  115.                                 lbz     \1,\2(base)
  116.                         .else
  117.                                 la      \1,\2
  118.                                 lbz     \1,0(\1)
  119.                         .endif
  120.                 .endm
  121.  
  122. .macro       lbs
  123.                         .ifdef    NEAR
  124.                                 lbz     \1,\2(base)
  125.                                 extsb   \1,\1
  126.                         .else
  127.                                 la      \1,\2
  128.                                 lbz     \1,0(\1)
  129.                                 extsb   \1,\1
  130.                         .endif
  131.                 .endm
  132.  
  133. .macro        lf
  134.                         .ifdef    NEAR
  135.                                 lfd     \1,\2(base)
  136.                         .else
  137.                                 mr      trash,r3
  138.                                 la      r3,\2
  139.                                 lfd     \1,0(r3)
  140.                                 mr      r3,trash
  141.                         .endif
  142.                 .endm
  143.  
  144. .macro        ls
  145.                         .ifdef    NEAR
  146.                                 lfs     \1,\2(base)
  147.                         .else
  148.                                 mr      trash,r3
  149.                                 la      r3,\2
  150.                                 lfs     \1,0(r3)
  151.                                 mr      r3,trash
  152.                         .endif
  153.                 .endm
  154.  
  155. .macro        sw
  156.                         .ifdef    NEAR
  157.                                 stw     \1,\2(base)
  158.                         .else
  159.                                 mr      trash,\1
  160.                                 la      \1,\2
  161.                                 stw     trash,0(\1)
  162.                                 mr      \1,trash
  163.                         .endif
  164.                 .endm
  165.  
  166. .macro        sh
  167.                         .ifdef    NEAR
  168.                                 sth     \1,\2(base)
  169.                         .else
  170.                                 mr      trash,\1
  171.                                 la      \1,\2
  172.                                 sth     trash,0(\1)
  173.                                 mr      \1,trash
  174.                         .endif
  175.                 .endm
  176.  
  177. .macro        sb
  178.                         .ifdef    NEAR
  179.                                 stb     \1,\2(base)
  180.                         .else
  181.                                 mr      trash,\1
  182.                                 la      \1,\2
  183.                                 stb     trash,0(\1)
  184.                                 mr      \1,trash
  185.                         .endif
  186.                 .endm
  187.  
  188. .macro        sf
  189.                         .ifdef    NEAR
  190.                                 stfd    \1,\2(base)
  191.                         .else
  192.                                 mr      trash,r3
  193.                                 la      r3,\2
  194.                                 stfd    \1,0(r3)
  195.                                 mr      r3,trash
  196.                         .endif
  197.                 .endm
  198.  
  199. .macro        ss
  200.                         .ifdef    NEAR
  201.                                 stfs    \1,\2(base)
  202.                         .else
  203.                                 mr      trash,r3
  204.                                 la      r3,\2
  205.                                 stfs    \1,0(r3)
  206.                                 mr      r3,trash
  207.                         .endif
  208.                 .endm
  209.  
  210. .macro       lba
  211.                 lbz     \1,\2
  212.                 extsb   \1,\1
  213.                 .endm
  214.  
  215. .macro      lbau
  216.                 lbzu    \1,\2
  217.                 extsb   \1,\1
  218.                 .endm
  219.  
  220. .macro      lbax
  221.                 lbzx    \1,\2,\3
  222.                 extsb   \1,\1
  223.                 .endm
  224.  
  225. .macro     lbaux
  226.                 lbzux   \1,\2,\3
  227.                 extsb   \1,\1
  228.                 .endm
  229.  
  230. .macro      stwi
  231.                 liw     trash,\1
  232.                 stw     trash,\2
  233.                 .endm
  234.  
  235. .macro      sthi
  236.                 li      trash,\1
  237.                 sth     trash,\2
  238.                 .endm
  239.  
  240. .macro      stbi
  241.                 li      trash,\1
  242.                 stb     trash,\2
  243.                 .endm
  244.  
  245. .macro     stwiu
  246.                 liw     trash,\1
  247.                 stwu    trash,\2
  248.                 .endm
  249.  
  250. .macro     sthiu
  251.                 li      trash,\1
  252.                 sthu    trash,\2
  253.                 .endm
  254.  
  255. .macro     stbiu
  256.                 li      trash,\1
  257.                 stbu    trash,\2
  258.                 .endm
  259.  
  260. .macro     stwix
  261.                 liw     trash,\1
  262.                 stwx    trash,\2,\3
  263.                 .endm
  264.  
  265. .macro     sthix
  266.                 li      trash,\1
  267.                 sthx    trash,\2,\3
  268.                 .endm
  269.  
  270. .macro     stbix
  271.                 li      trash,\1
  272.                 stbx    trash,\2,\3
  273.                 .endm
  274.  
  275. .macro    stwiux
  276.                 liw     trash,\1
  277.                 stwux   trash,\2,\3
  278.                 .endm
  279.  
  280. .macro    sthiux
  281.                 li      trash,\1
  282.                 sthux   trash,\2,\3
  283.                 .endm
  284.  
  285. .macro    stbiux
  286.                 li      trash,\1
  287.                 stbux   trash,\2,\3
  288.                 .endm
  289.  
  290. .macro       swi
  291.                         .ifdef NEAR
  292.                                 liw     trash,\1
  293.                                 stw     trash,\2(base)
  294.                         .else
  295.                                 stw     r3,-4(local)
  296.                                 liw     trash,\1
  297.                                 la      r3,\2
  298.                                 stw     trash,0(r3)
  299.                                 lwz     r3,-4(local)
  300.                         .endif
  301.                 .endm
  302.  
  303. .macro       shi
  304.                         .ifdef    NEAR
  305.                                 li      trash,\1
  306.                                 sth     trash,\2(base)
  307.                         .else
  308.                                 stw     r3,-4(local)
  309.                                 li      trash,\1
  310.                                 la      r3,\2
  311.                                 sth     trash,0(r3)
  312.                                 lwz     r3,-4(local)
  313.                         .endif
  314.                 .endm
  315.  
  316. .macro       sbi
  317.                         .ifdef    NEAR
  318.                                 li      trash,\1
  319.                                 stb     trash,\2(base)
  320.                         .else
  321.                                 stw     r3,-4(local)
  322.                                 li      trash,\1
  323.                                 la      r3,\2
  324.                                 stb     trash,0(r3)
  325.                                 lwz     r3,-4(local)
  326.                         .endif
  327.                 .endm
  328.  
  329. .macro       liw
  330.                 lis     \1,\2@ha
  331.                 ori     \1,\1,\2@l
  332.                 .endm
  333.  
  334. .macro      clrw
  335.                 xor\0   \1,\1,\1
  336.                 .endm
  337.  
  338. .macro      clrh
  339.                 clrrwi\0 \1,\1,16
  340.                 .endm
  341.  
  342. .macro      clrb
  343.                 clrrwi\0 \1,\1,8
  344.                 .endm
  345.  
  346. .macro      setb
  347.                 ori     \1,\1,0xff
  348.                 .endm
  349.  
  350. .macro      seth
  351.                 ori     \1,\1,0xffff
  352.                 .endm
  353.  
  354. .macro      setw
  355.                 eqv\0   \1,\1,\1
  356.                 .endm
  357.  
  358. .macro        mh
  359.                 insrwi\0 \1,\2,16,16
  360.                 .endm
  361.  
  362. .macro        mb
  363.                 insrwi\0 \1,\2,8,24
  364.                 .endm
  365.  
  366. .macro      tstb
  367.                 extsb.  trash,\1
  368.                 .endm
  369.  
  370. .macro      tsth
  371.                 extsh.  trash,\1
  372.                 .endm
  373.  
  374. .macro      tstw
  375.                 mr.     \1,\1
  376.                 .endm
  377.  
  378. .macro    bittst
  379.                 .iflt    (\2)-31
  380.                         extrwi. trash,\1,1,\2
  381.                 .else
  382.                         andi.   trash,\1,0x1
  383.                 .endif
  384.                 .endm
  385.  
  386. .macro    bitset
  387.                 .iflt    (\2)-16
  388.                         oris    \1,\1,(1<<(15-(\2)))
  389.                 .else
  390.                         ori     \1,\1,(1<<(31-(\2)))
  391.                 .endif
  392.                 .endm
  393.  
  394. .macro    bitclr
  395.                 .iflt    (\2)-16
  396.                         oris    \1,\1,(1<<(15-(\2)))
  397.                         xoris   \1,\1,(1<<(15-(\2)))
  398.                 .else
  399.                         ori     \1,\1,(1<<(31-(\2)))
  400.                         xori    \1,\1,(1<<(31-(\2)))
  401.                 .endif
  402.                 .endm
  403.  
  404. .macro    bitchg
  405.                 .iflt    (\2)-16
  406.                         xoris   \1,\1,(1<<(15-(\2)))
  407.                 .else
  408.                         xori    \1,\1,(1<<(31-(\2)))
  409.                 .endif
  410.                 .endm
  411.  
  412. .macro      push
  413.                 stwu    \1,-4(local)
  414.                 .endm
  415.  
  416. .macro     pushf
  417.                 stfdu   \1,-8(local)
  418.                 .endm
  419.  
  420. .macro    pushlr
  421.                 mflr    trash
  422.                 stwu    trash,-4(local)
  423.                 .endm
  424.  
  425. .macro   pushctr
  426.                 mfctr   trash
  427.                 stwu    trash,-4(local)
  428.                 .endm
  429.  
  430. .macro    pushcr
  431.                 mfcr    trash
  432.                 stwu    trash,-4(local)
  433.                 .endm
  434.  
  435. .macro       pop
  436.                 lwz     \1,0(local)
  437.                 addi    local,local,4
  438.                 .endm
  439.  
  440. .macro      popf
  441.                 lfd     \1,0(local)
  442.                 addi    local,local,8
  443.                 .endm
  444.  
  445. .macro     poplr
  446.                 lwz     trash,0(local)
  447.                 addi    local,local,4
  448.                 mtlr    trash
  449.                 .endm
  450.  
  451. .macro    popctr
  452.                 lwz     trash,0(local)
  453.                 addi    local,local,4
  454.                 mtctr   trash
  455.                 .endm
  456.  
  457. .macro     popcr
  458.                 lwz     trash,0(local)
  459.                 addi    local,local,4
  460.                 mtcr    trash
  461.                 .endm
  462.  
  463. .macro       lnk
  464.                 stwu    \1,-4(local)
  465.                 mr      \1,local
  466.                 addi    local,local,\2
  467.                 .endm
  468.  
  469. .macro      ulnk
  470.                 mr      local,\1
  471.                 lwz     \1,0(local)
  472.                 addi    local,local,4
  473.                 .endm
  474.  
  475.  
  476. .macro  setlocal
  477. .set     __LOCALSIZE,\1
  478. .set     __LOCAL,\2
  479. .set       local,\2
  480. .endm
  481.  
  482.  
  483. .macro    prolog
  484.                 stw     base,20(stack)
  485.                 mflr    trash
  486.                 stw     trash,8(stack)
  487.                 mfcr    trash
  488.                 stw     trash,4(stack)
  489.                 stw     local,-4(stack)
  490.                 subi    local,stack,4
  491. .set      __ARGS,24+4+(__LOCALSIZE)+56
  492.                         stwu    stack,-((__ARGS)-56)(stack)
  493.                 .endm
  494.  
  495. .macro    epilog
  496.                 lwz     stack,0(stack)
  497.                 lwz     local,-4(stack)
  498.                 lwz     trash,8(stack)
  499.                 mtlr    trash
  500.                 lwz     trash,4(stack)
  501.                 mtcr    trash
  502.                 lwz     base,20(stack)
  503.                 blr
  504.                 .endm
  505.  
  506.                 .endif
  507.  
  508.                 .endif
  509.  
  510.  
  511.  
  512.